package com.platform.qujia.service;

import com.platform.qujia.pojo.*;
import com.platform.qujia.pojo.dto.CancelCouponDto;
import com.platform.qujia.pojo.dto.CouponPaymetDto;
import com.platform.qujia.pojo.dto.carWashPaymentDto;
import com.platform.qujia.pojo.dto.newCarWashPaymetDto;
import com.platform.qujia.utils.ResultData;
import org.apache.ibatis.annotations.Param;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

public interface CouponService {
    /**
     * 计算使用优惠券后金额
     * @param mobilePhone
     * @param entepriseId
     * @param amt
     * @return
     */
    List<CouponUser> calCouponAmt(String mobilePhone, Integer entepriseId, BigDecimal amt);

    /**
     * 查询用户该领取方式下已有的优惠券数量
     * @param couponUser
     * @return
     */
    int selectCouUserSum(CouponUser couponUser);

    /**
     * 统计优惠券数量
     * @param mobilePhone
     * @param enterpriseId
     * @return
     */
    int setCoupnCount(String mobilePhone, Integer enterpriseId);


    /***
     * 查询用户核销列表
     * @param couponUser
     * @return
     */
    List<CouponUser> selectVerUserCouponList(CouponUser couponUser);

    /**
     * 获取该领取方式下的优惠券
     * @param param
     * @return
     */
    List<CouponIssue> selectCouponListByCouponIssueId(Map<String, Object> param);
    // 根据活动 ID 查询对应的 issue_id 列表
      List<String> getIssueIdsByActivityId(String activityId);

  List<String> getIssueIdsandCouponByActivityId(String activityId);

  List<String> getIssueIdsByActivityIdAndAmt(String activityId,BigDecimal receivedAmt);

      Map<String,Object> getActivityAllByActivityId(String activityId);

  String getAppUserGrowLevel(String mobilePhone,Long enterpriseId);

  String checkisLabelUser(String mobilePhone,Long enterpriseId,String couponIssueId);

  String checkCouponActivity(Integer enterpriseId, PayOrder payOrderInfo,Double amt );

    /**
     * 查询优惠券单独活动信息，无优惠券
     * @param couponIssue
     * @return
     */
    CouponIssue selectCouponIssueInfo(CouponIssue couponIssue);

    /**
     * 查询该用户当天参加本次优惠券的活动次数
     * @param couponUserGiveCount
     * @return
     */
    int selectCouponUserGiveCountByToday(CouponUserGiveCount couponUserGiveCount);

    int selectCouponUser(String couponIssueId , String mobilePhone);

    /**
     * 保存用户优惠券
     * @param couponUser
     * @return
     */
    int saveCouponUser(CouponUser couponUser);

    /**
     * 更新优惠券模板数量
     * @param couponTemplate
     * @return
     */
    int updateCouponTemplate(CouponTemplate couponTemplate);

    /***
     * 查询用户已有优惠券
     * @param param
     * @return
     */
    List<CouponUser> selectCouponUserList(Map<String, Object> param);

    /***
     * 消费完自动领取优惠券
     * @param appUserInfo
     * @param stationId
     * @param amt
     */
    int initiativeCoupon(AppUserInfo appUserInfo, Integer stationId, BigDecimal amt,String orderNo);


    /**
     * 领取优惠券公众号推送通知
     * @param station  油站ID
     * @param payOrderInfo
     * @param appUserInfo
     */
    void pushWxGzhInitiativeCouponInfo(Station station, PayOrder payOrderInfo, int i, AppUserInfo appUserInfo);

    /***
     * 领取优惠券公众号推送通知
     * @param enterprise 油企ID
     * @param i
     * @param appUserInfo
     */
    void pushWxGzhInitiativeCouponInfo(Enterprise enterprise, int i, AppUserInfo appUserInfo);

    /**
     * 批量保存用户优惠券
     * @param couponUsersList
     * @return
     */
    int saveBatchCouponUser(@Param("couponUsersList") List<CouponUser> couponUsersList);

    /**
     * 批量更新优惠券模板领取数量
     * @param ids
     * @return
     */
    int updateBatchCouponTemplate(List<Integer> ids);

    /**
     * 更新用户优惠券信息
     * @param couponUser
     * @return
     */
    int updateCouponUser(CouponUser couponUser);

    /***
     * 用户进入领取页面的次数
     * @param couponUserGiveCount
     * @return
     */
    CouponUserGiveCount selectCouponUserGiveCount(CouponUserGiveCount couponUserGiveCount);

    /**
     * 更新用户进入领取页面的次数
     * @param couponUserGiveCount
     */
    int updateCouponUserGiveCount(CouponUserGiveCount couponUserGiveCount);

    /**
     * 新增用户进入该领取方式次数信息
     * @param couponUserGiveCount
     */
    int insertCouponUserGiveCount(CouponUserGiveCount couponUserGiveCount);

    /**
     * 查询用户该领取方式下的参与次数
     * @param couponUserGiveCount
     * @return
     */
    int selectUserIssueGiveCount(CouponUserGiveCount couponUserGiveCount);

    /***
     * 查询最后一次领取的随机数
     * @param couponUser
     * @return
     */
    CouponUser selectUserIssueRedomMax(CouponUserGiveCount couponUser);

    /***
     * 根据用户已领取优惠券查询用户领取的优惠券模板列
     * @param couponUser
     * @return
     */
    List<CouponTemplate> selectCouponTemListByCouponUser(CouponUser couponUser);

    /***
     * 批量查询模板列
     * @param couponTemplate
     * @return
     */
    List<CouponTemplate> selectCouponTemListByTemIds(CouponTemplate couponTemplate);

    /***
     * 查询优惠券模板信息
     * @param couponTemplate
     * @return
     */
    CouponTemplate selectCouponTemInfoById(CouponTemplate couponTemplate);

    /***
     * 查询用户所有的优惠券 公众号展示用户优惠用
     * @param couponUser
     * @return
     */
    List<CouponUser> selectUserAllCoupons(CouponUser couponUser);

  /***
   * 查询用户已结束优惠券 公众号展示用户优惠用
   * @param couponUser
   * @return
   */
  List<CouponUser> selectUsedCoupons(CouponUser couponUser);

    /***
     * 用户开通超级会员后自动发放优惠券
     * @param appUserInfo
     * @param appUserSuper
     */
    void userSuperCoupon(AppUserInfo appUserInfo,AppUserSuper appUserSuper);

    public int initiativeCouponV2(AppUserInfo appUserInfo, Integer stationId, BigDecimal amt);

    BigDecimal queryMinUseCouponAtmByCouponTemlete(Integer id);

    ResultData<?> carWashCouponDestroy(carWashPaymentDto cw);

  CouponInfo selectCouponTemInfoById(Long couponInfoId);


  public CouponInfoSettingDetail getCouponInfoIdByCustomerCardUseRecord(CustomerCardUseRecord cardRecordByOrderNo,String payType) ;

  /**
   * 获取油企是否开启注册自动发券
   * @param enterpriseId
   * @return
   */
  List<String> getCouponActivity(Integer enterpriseId);

  /**
   * 获取注册发券的优惠券信息
   * @param enterpriseId
   * @param mobilePhone
   * @return
   */
  String getRegisterCoupon(Integer enterpriseId, String mobilePhone);

//  void registrationRelease(AppUserInfo appUserInfo);

  List<CouponInfo> getCouponInfoByCouponIssue(List<String> couponIssues);

  ResultData<?> newCarWashCouponDestroy(newCarWashPaymetDto cw);

  ResultData<?> couponDestroy(CouponPaymetDto cw);

  ResultData<?> couponDestroyList(CouponPaymetDto cw);
}
